package com.exit490.cfp.dao;

import java.util.ArrayList;
import java.util.Date;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

import com.exit490.cfp.helper.DataSourceHelper;
import com.exit490.cfp.modelo.Recorrencia;

public class RecorrenciaDAO extends Recorrencia {

    public static String TABELA_NOME = "cfp_recorrencia";
    public static String COLUNA_ID = "id_recorrencia";
    public static String COLUNA_ID_TRANSACAO = "id_transacao";
    public static String COLUNA_DATA_FINAL = "data_final";
    public static String COLUNA_DATA_VENCIMENTO = "data_vencimento";

    private DataSourceHelper data;
    private ContentValues content = new ContentValues();
    private Cursor cursor = null;
    private SQLiteDatabase sqlLite;
    private long linhasAfetadas;
    private ArrayList<Recorrencia> listaDeRecorrencia;
    private String[] colunas = new String[] { COLUNA_ID, COLUNA_ID_TRANSACAO, COLUNA_DATA_FINAL, COLUNA_DATA_VENCIMENTO };

    public RecorrenciaDAO(Context context) {
        data = new DataSourceHelper(context);
        sqlLite = data.getDatabase();
    }

    public boolean inserirRecorrencia(Recorrencia recorrencia) {

        content.put(COLUNA_ID, recorrencia.getIdRecorrencia());
        content.put(COLUNA_ID_TRANSACAO, recorrencia.getIdTransacao());
        content.put(COLUNA_DATA_FINAL, recorrencia.getDataFinal().toString());
        content.put(COLUNA_DATA_VENCIMENTO, recorrencia.getDataVencimento().toString());

        this.linhasAfetadas = this.sqlLite.insert(TABELA_NOME, null, content);

        return sucesso();
    }

    public boolean removerRecorrencia(Recorrencia recorrencia) {

        String[] args = { String.valueOf(recorrencia.getIdRecorrencia()) };
        linhasAfetadas = this.sqlLite.delete(TABELA_NOME, COLUNA_ID + "=?", args);

        return sucesso();

    }

    public boolean atualizarDataFinal(Recorrencia recorrencia) {

        String[] args = { String.valueOf(recorrencia.getIdTransacao()) };
        this.content.put(COLUNA_DATA_FINAL, recorrencia.getDataFinal().toString());
        this.linhasAfetadas = this.sqlLite.update(TABELA_NOME, this.content, COLUNA_ID + "=?", args);

        return sucesso();

    }

    public boolean atualizarDataVencimento(Recorrencia recorrencia) {

        String[] args = { String.valueOf(recorrencia.getIdTransacao()) };
        this.content.put(COLUNA_DATA_FINAL, recorrencia.getDataVencimento().toString());
        this.linhasAfetadas = this.sqlLite.update(TABELA_NOME, this.content, COLUNA_ID + "=?", args);

        return sucesso();
    }

    public ArrayList<Recorrencia> selecionarTodasRecorrencias() {

        Recorrencia recorrencia = new Recorrencia();
        cursor = sqlLite.query(TABELA_NOME, colunas, null, null, null, null, null);

        if (cursor != null) {
            cursor.moveToFirst();
            while (cursor.moveToNext()) {

                recorrencia.setIdRecorrencia(cursor.getLong(cursor.getColumnIndex(COLUNA_ID)));
                recorrencia.setIdTransacao(cursor.getLong(cursor.getColumnIndex(COLUNA_ID_TRANSACAO)));
                recorrencia.setDataFinal(new Date(cursor.getLong(cursor.getColumnIndex(COLUNA_DATA_FINAL))));
                recorrencia.setDataVencimento(new Date(cursor.getLong(cursor.getColumnIndex(COLUNA_DATA_VENCIMENTO))));

                listaDeRecorrencia.add(recorrencia);

            }
        }

        cursor.close();
        return listaDeRecorrencia;
    }

    public Recorrencia selecionarRecorrencia(Recorrencia recorrencia) {

        Recorrencia transacaoProjetada = new Recorrencia();

        String where = COLUNA_ID_TRANSACAO + "= ?";
        String parseIdTransacao = String.valueOf(recorrencia.getIdTransacao());
        String argumentos[] = new String[] { parseIdTransacao };
        cursor = sqlLite.query(TABELA_NOME, colunas, where, argumentos, null, null, null);

        if (cursor != null & cursor.moveToFirst()) {

            transacaoProjetada.setIdRecorrencia(cursor.getLong(cursor.getColumnIndex(COLUNA_ID)));
            transacaoProjetada.setIdTransacao(cursor.getLong(cursor.getColumnIndex(COLUNA_ID_TRANSACAO)));
            transacaoProjetada.setDataFinal(new Date(cursor.getLong(cursor.getColumnIndex(COLUNA_DATA_FINAL))));
            transacaoProjetada.setDataVencimento(new Date(cursor.getLong(cursor.getColumnIndex(COLUNA_DATA_VENCIMENTO))));

        }

        cursor.close();
        return transacaoProjetada;
    }

    private boolean sucesso() {

        if (this.linhasAfetadas > 0) {
            return true;
        } else {
            return false;
        }
    }

}
